package com.tpl.core.basedata.dao;


import java.util.List;

import com.tpl.core.common.annotation.DaoAnnotation;
import com.tpl.core.entity.sys.Role;
import org.apache.ibatis.annotations.Param;



/**
 * 说明 :角色数据层操作接口
 * @author <a href="mailto:3380084@gmail.com">张坤雷</a>
 * @version 创建时间：2013-7-2 下午3:19:28 
 *
 */
@DaoAnnotation
public interface RoleDao {
	/**
	 * 
	 * 说明 :获取用户的所有角色
	 */
	List<Role> getUserRoles(@Param("userId")Long userId, @Param("deptId")Long deptId);
	
	
	/**
	 * 
	 * 说明 :获取对应部门下所有的角色
	 */
	List<Role> getRolesByDeptId(@Param("deptId")Long deptId);
	
	/**
	 * 
	 * 说明 :获取多个部门下所有的角色
	 */
	List<Role> getRolesByMoreDeptId(@Param("deptIds")String deptIds);
	
	
	/**
	 * 
	 * 说明 :获取对应部门下所有的角色
	 */
	List<Role> getRolesPageByDeptId(@Param("deptId")Long deptId,@Param("pageIndex")int pageIndex,@Param("pageSize")int pageSize);
	
	
	/**
	 * 获取部门下人员总的数量
	 * @param deptId
	 * @return
	 */
	int getRolesPageByDeptIdCount(@Param("deptId")Long deptId);
	/**
	 * 
	 * 说明 :插入角色
	 */
	void insertRole(Role role);
	
	
	/**
	 * 
	 * 说明 :插入角色菜单
	 */
	void insertRoleMenu(Role role);
	
	
	/**
	 * 更新角色名称
	 * @param role
	 */
	void updateRole(Role role);
	
	
	/**
	 * 通过角色id,获取对应菜单
	 * @param roleId
	 * @return
	 */
	List<Role> getMenusByRoleId(@Param("roleId")Long roleId);
	
	/**
	 * 通过角色id获取人员
	 * @param roleId
	 * @return
	 */
	List<Role> getRoleUserByRoleId(@Param("roleId")Long roleId);
	
	/**
	 * 通过角色id,获取对应角色
	 * @param roleId
	 * @return
	 */
	List<Role> getRoleUserByUserId(@Param("userId")Long userId);
	
	
	/**
	 * 通过角色id获取角色信息
	 * @param roleId
	 * @return
	 */
	Role getRoleById(@Param("roleId")Long roleId);
	/**
	 * 插入角色人员信息
	 * @param role
	 */
	void insertRoleUser(Role role);
	
	/**
	 * 删除角色人员
	 * @param roleId
	 * @param userId
	 */
	void deleteRoleUserById(@Param("id")Long id);
	
	/**
	 * 删除角色菜单
	 * @param roleId
	 * @param userId
	 */
	void deleteRoleMenuById(@Param("id")Long id);

	/**
	 * @Title: updateAllDefaultZero 
	 * @Description: TODO 更新所有默认值为0 （非默认） 
	 * @param deptId 部门id 
	 * @return void 无返回类型 
	 * @throws
	 */
	void updateAllDefaultZero(Long deptId);
	
	/**
	 * @Title: getIsDefaultDeptRoleByDeptId 
	 * @Description: TODO  通过部门Id获取默认部门角色
	 * @param deptId	部门Id
	 * @return Role  角色 
	 * @throws
	 */
	Role getIsDefaultDeptRoleByDeptId(Long deptId);
}
